package br.ufc.quixada.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.PersistenceException;
import javax.servlet.http.HttpSession;

import br.ufc.quixada.model.DAO.EventoJDAO;
import br.ufc.quixada.model.DAO.PerfilJDAO;
import br.ufc.quixada.model.entidades.Evento;
import br.ufc.quixada.model.entidades.Papel;
import br.ufc.quixada.model.entidades.Perfil;
import br.ufc.quixada.model.entidades.Usuario;
import br.ufc.quixada.model.interfaces.EventoDAO;
import br.ufc.quixada.model.interfaces.PerfilDAO;

@ViewScoped
@ManagedBean(name = "eventoBean")
public class EventoBean implements Serializable{

	private Evento evento;
	
	public EventoBean(){		
		this.evento = new Evento();
	}
	
	public String cadastrarEvento(){
		Usuario usuario = null;
		Object user;
		EventoDAO dao = new EventoJDAO();
		
		//Pega o usuario que esta na sessão
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		
	
		if (session != null && (user = session.getAttribute("usuario")) != null
				&& (user instanceof Usuario)) 
			usuario = (Usuario) user;
		
		//Obtendo o perfil de administrador para indicar qm criou o evento
		
		try{

			PerfilDAO perfiloDao = new PerfilJDAO();

			Perfil perfilAdministrador = perfiloDao.obtemPerfil(usuario, Papel.ADMINISTRADOR_EVENTO);
			
			evento.setAdmin(perfilAdministrador);
	
			dao.begin();	
			dao.save(evento);
			dao.commit();
			System.out.println("Evento cadastrado");
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Evento cadastrado com sucesso",
							"Evento Cadastrad"));
			System.out.println("Eventos do usuario: "+dao.getEventosByUsuario(perfilAdministrador).size());
		}catch(PersistenceException e){
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro",
							"Aviso"));
			e.printStackTrace();
		}finally{
			dao.close();
		}
		
		try {
			evento = new Evento();
			this.finalize();
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "?faces-redirect=true";
	}

	public Evento getEvento() {
		return evento;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}
	
	public List<Evento> getEventos(){		
		EventoDAO eventoDao = new EventoJDAO();
		return eventoDao.getEventos();
	}
	
	public List<Evento> getEventosAdmin(){
		Usuario usuario = null;
		Object user;
		EventoDAO dao = new EventoJDAO();
		
		//Pega o usuario que esta na sessão
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		
	
		if (session != null && (user = session.getAttribute("usuario")) != null
				&& (user instanceof Usuario)) 
			usuario = (Usuario) user;
		
		PerfilDAO perfiloDao = new PerfilJDAO();

		Perfil perfilAdministrador = perfiloDao.obtemPerfil(usuario, Papel.ADMINISTRADOR_EVENTO);
		
		return dao.getEventosByUsuario(perfilAdministrador);

	}
	
	public String adicionarAtividade(){
		return "?faces-redirect=true";
	}

}
